class Solution {
public:
    // 法一：双指针  处理好的数据 左指针 0...0 右指针 待处理的数据
    void moveZeroes(vector<int>& nums) {
        int l = 0, r = 0;
        while (r < nums.size()) {
            if (nums[r] != 0) {
                swap(nums[l], nums[r]);
                l++;
            }
            r++;
        }
    }
    
    // 法二：类似插入排序，覆盖不是0的，后面补0
    void moveZeroes(vector<int>& nums) {
        int idx = 0;
        int num_idx = 0;
        while (num_idx < nums.size()) {
            if (nums[num_idx] != 0) 
                nums[idx++] = nums[num_idx];
            num_idx++;
        }
        while (idx < nums.size()) {
            nums[idx++] = 0;
        }
    }
};